Method-Level Security হল Spring Security-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা আপনাকে ক্লাস বা মেথড স্তরে নিরাপত্তা নিয়ন্ত্রণ করতে দেয়। এর মাধ্যমে আপনি নির্দিষ্ট মেথড বা ক্লাসের জন্য authentication এবং authorization নির্ধারণ করতে পারেন, যাতে শুধুমাত্র নির্দিষ্ট রোল বা প্রিভিলেজধারী ব্যবহারকারী সেই মেথড বা ক্লাস অ্যাক্সেস করতে পারে।
Spring Security-তে মেথড লেভেলে নিরাপত্তা চালু করতে @EnableGlobalMethodSecurity অ্যানোটেশন ব্যবহার করা হয়, এবং এর মধ্যে আপনি prePostEnabled
, securedEnabled
, অথবা jsr250Enabled
অপশন ব্যবহার করতে পারেন।
Spring Security-তে মেথড-লেভেল সিকিউরিটি কনফিগার করার জন্য প্রধানত তিনটি পদ্ধতি ব্যবহার করা হয়:
প্রথমে Spring Security-তে Method-Level Security সক্ষম করতে @EnableGlobalMethodSecurity অ্যানোটেশন ব্যবহার করতে হবে। এই অ্যানোটেশনটি ক্লাস বা কনফিগারেশনে ব্যবহার করতে হবে, এবং এর মধ্যে আপনি কোন ধরনের নিরাপত্তা সক্ষম করবেন তা নির্ধারণ করতে পারেন।
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// Security Configuration Code
}
@PreAuthorize
এবং @PostAuthorize
অ্যানোটেশনগুলি সক্রিয় করে।@Secured
অ্যানোটেশন সক্রিয় করে।@RolesAllowed
অ্যানোটেশন সক্রিয় করে।@Secured অ্যানোটেশনটি ব্যবহারকারীর রোল ভিত্তিক অ্যাক্সেস কন্ট্রোল প্রয়োগ করতে সাহায্য করে। এটি সাধারণত মেথডের উপর রোল বা প্রিভিলেজ অ্যাসাইন করতে ব্যবহৃত হয়।
import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Service;
@Service
public class MyService {
@Secured("ROLE_ADMIN")
public void performAdminTask() {
System.out.println("Admin Task Performed");
}
@Secured({"ROLE_USER", "ROLE_ADMIN"})
public void performUserOrAdminTask() {
System.out.println("User or Admin Task Performed");
}
}
ROLE_ADMIN
রোলধারী ব্যবহারকারীদের জন্য অ্যাক্সেসযোগ্য।ROLE_USER
এবং ROLE_ADMIN
উভয় রোলধারী ব্যবহারকারীদের জন্য অ্যাক্সেসযোগ্য।@PreAuthorize এবং @PostAuthorize অ্যানোটেশনগুলি অধিক কাস্টমাইজেবল নিরাপত্তা কন্ট্রোল প্রদান করে। @PreAuthorize
মেথড চালানোর আগে অ্যাক্সেস কন্ট্রোল চেক করে, এবং @PostAuthorize
মেথড শেষ হওয়ার পর।
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.access.prepost.PostAuthorize;
import org.springframework.stereotype.Service;
@Service
public class MyService {
@PreAuthorize("hasRole('ADMIN') and #userId == authentication.name")
public void performTaskForUser(String userId) {
System.out.println("Task performed for user: " + userId);
}
@PostAuthorize("returnObject.username == authentication.name")
public User getUserDetails(String userId) {
return new User(userId, "Some Details");
}
}
performTaskForUser
মেথডটি শুধুমাত্র তখনই এক্সিকিউট হবে যখন ব্যবহারকারী ADMIN রোলধারী হবে এবং তার userId
মেথডে পাঠানো userId
এর সমান হবে।getUserDetails
মেথডের শেষে, এটি চেক করবে যে রিটার্ন হওয়া অবজেক্টের username
ব্যবহারকারীর authentication.name
এর সাথে মেলে কিনা।@RolesAllowed JSR-250 স্ট্যান্ডার্ডের অংশ এবং এটি মেথডের জন্য রোল নির্ধারণ করে। এটি @Secured
এর মতো কাজ করে, তবে এটি Java EE-এর অংশ এবং সাধারণত Java EE অথবা Spring Framework সহ ব্যবহৃত হয়।
import javax.annotation.security.RolesAllowed;
import org.springframework.stereotype.Service;
@Service
public class MyService {
@RolesAllowed("ADMIN")
public void performAdminTask() {
System.out.println("Admin Task Performed");
}
@RolesAllowed({"USER", "ADMIN"})
public void performUserOrAdminTask() {
System.out.println("User or Admin Task Performed");
}
}
ROLE_ADMIN
বা ROLE_USER
ব্যবহারকারীকে মেথড অ্যাক্সেসের অনুমতি দেয়।কাস্টম নিরাপত্তা চেক: আপনি @PreAuthorize
অথবা @PostAuthorize
এর মধ্যে SpEL (Spring Expression Language) ব্যবহার করে কাস্টম নিরাপত্তা চেক করতে পারেন।
উদাহরণ:
@PreAuthorize("hasPermission(#document, 'read')")
public void readDocument(Document document) {
// Document পড়া
}
Method-Level Security Testing: আপনি @Secured
, @PreAuthorize
, অথবা @RolesAllowed
এর নিরাপত্তা পরীক্ষা করতে পারেন @WithMockUser
ব্যবহার করে।
উদাহরণ:
@Test
@WithMockUser(roles = "ADMIN")
public void testAdminTask() {
myService.performAdminTask(); // This should work
}
SpEL (Spring Expression Language): @PreAuthorize
এবং @PostAuthorize
অ্যানোটেশনগুলির মধ্যে SpEL ব্যবহার করা যেতে পারে, যা আপনাকে আরও কাস্টম এবং শর্তাধীন অনুমতি প্রদান করতে সক্ষম করে।
উদাহরণ:
@PreAuthorize("hasRole('ADMIN') or #userId == authentication.name")
public void someMethod(String userId) {
// Perform some task
}
Spring Security-তে Method-Level Security হল একটি শক্তিশালী টুল যা আপনাকে নিরাপত্তা নিয়ন্ত্রণের আরও উচ্চ স্তরের কাস্টমাইজেশন প্রদান করে। আপনি মেথড বা ক্লাসের উপর ভিত্তি করে ব্যবহারকারীর রোল, প্রিভিলেজ এবং অন্যান্য শর্ত অনুযায়ী অ্যাক্সেস কন্ট্রোল করতে পারবেন। @Secured
, @PreAuthorize
, @PostAuthorize
, এবং @RolesAllowed
এর মাধ্যমে সহজে মেথড নিরাপত্তা পরিচালনা করা সম্ভব।
Method-level security হল Spring Security-এর একটি বৈশিষ্ট্য যা আপনাকে নির্দিষ্ট মেথডের জন্য নিরাপত্তা কনফিগার করার সুবিধা দেয়। এর মাধ্যমে আপনি শুধুমাত্র নির্দিষ্ট রোল, পারমিশন বা শর্তের অধীনে একটি মেথড অ্যাক্সেস করার অনুমতি দিতে পারেন। এটি মূলত annotation-based security প্রয়োগে ব্যবহৃত হয় এবং খুবই কার্যকরী যখন আপনি fine-grained control চান যে কোন ব্যবহারকারী বা রোল কোন ফিচার অ্যাক্সেস করতে পারবে।
Spring Security-তে method-level security কে প্রাথমিকভাবে দুইটি মূল উপায়ে ব্যবহার করা হয়:
@PreAuthorize
@PreAuthorize
annotation ব্যবহার করে মেথডের আগে authorization চেক করা হয়। এটি SpEL (Spring Expression Language)
ব্যবহার করে condition নির্ধারণ করতে পারে।@Secured
@Secured
annotation শুধু নির্দিষ্ট রোল বা পারমিশন মেনে মেথড অ্যাক্সেস করতে অনুমতি দেয়। তবে এটি SpEL
এর চেয়ে কম ফ্লেক্সিবল।@PostAuthorize
@PostAuthorize
annotation ব্যবহার করে মেথডের পর authorization চেক করা হয়। এটি মূলত মেথডের আউটপুট পর্যালোচনা করার জন্য ব্যবহৃত হয়।@RolesAllowed
@RolesAllowed
annotation Java EE এর একটি অংশ এবং এটি সেভাবে Spring Security এর মাধ্যমে কাজ করে। তবে এটি @Secured
এর মতো রোল চেক করতে ব্যবহৃত হয়।1. Method-level security সক্রিয় করা
Spring Security-তে method-level security ব্যবহারের জন্য @EnableGlobalMethodSecurity
annotation যোগ করতে হয়। এটি আপনার Spring Security configuration ক্লাসে থাকতে হবে।
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfig {
// Configuration for method-level security
}
prePostEnabled = true
: এটি @PreAuthorize
এবং @PostAuthorize
ব্যবহার করতে সক্ষম করবে।securedEnabled = true
: এটি @Secured
annotation এর ব্যবহার সক্ষম করবে।@PreAuthorize
ব্যবহার@PreAuthorize
ব্যবহার করে মেথডের আগে condition চেক করা হয়। এখানে আমরা SpEL ব্যবহার করছি যা রোল বা পারমিশনের উপর ভিত্তি করে মেথড অ্যাক্সেস নিয়ন্ত্রণ করবে।
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;
@Service
public class ProductService {
@PreAuthorize("hasRole('ADMIN')")
public void createProduct() {
System.out.println("Product created!");
}
@PreAuthorize("hasRole('USER') or hasRole('ADMIN')")
public void viewProduct() {
System.out.println("Product viewed!");
}
@PreAuthorize("hasPermission(#productId, 'Product', 'READ')")
public void viewProductDetails(Long productId) {
System.out.println("Product details viewed for productId: " + productId);
}
}
@PreAuthorize("hasRole('ADMIN')")
: শুধুমাত্র ADMIN রোলের ব্যবহারকারীরা createProduct()
মেথডটি অ্যাক্সেস করতে পারবেন।@PreAuthorize("hasRole('USER') or hasRole('ADMIN')")
: USER বা ADMIN রোলের ব্যবহারকারী viewProduct()
মেথডটি অ্যাক্সেস করতে পারবেন।@PreAuthorize("hasPermission(#productId, 'Product', 'READ')")
: এই method-এ hasPermission
ব্যবহার করে permission ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ করা হয়েছে।@Secured
ব্যবহার@Secured
একটি নির্দিষ্ট রোল বা permission ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এটি খুবই সরল এবং SpEL এর চেয়ে কম ফ্লেক্সিবল।
import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Service;
@Service
public class ProductService {
@Secured("ROLE_ADMIN")
public void createProduct() {
System.out.println("Product created!");
}
@Secured({"ROLE_USER", "ROLE_ADMIN"})
public void viewProduct() {
System.out.println("Product viewed!");
}
}
@Secured("ROLE_ADMIN")
: শুধুমাত্র ROLE_ADMIN ব্যবহারকারী createProduct()
মেথড অ্যাক্সেস করতে পারবেন।@Secured({"ROLE_USER", "ROLE_ADMIN"})
: ROLE_USER বা ROLE_ADMIN ব্যবহারকারী viewProduct()
মেথড অ্যাক্সেস করতে পারবেন।@PostAuthorize
ব্যবহার@PostAuthorize
annotation মেথডের পরে ব্যবহার করা হয়। এটি মেথডের আউটপুট যাচাই করার জন্য ব্যবহৃত হয়।
import org.springframework.security.access.prepost.PostAuthorize;
import org.springframework.stereotype.Service;
@Service
public class ProductService {
@PostAuthorize("returnObject.owner == authentication.name")
public Product getProduct(Long productId) {
return productRepository.findById(productId).orElse(null);
}
}
@PostAuthorize("returnObject.owner == authentication.name")
: এটি চেক করে যে Product
অবজেক্টটির owner
বর্তমানে লগ ইন করা ব্যবহারকারীর নামের সাথে মেলাচ্ছে কি না।@RolesAllowed
ব্যবহার@RolesAllowed
Java EE-এর একটি annotation এবং Spring Security-এও এটি ব্যবহৃত হয়। এটি শুধুমাত্র নির্দিষ্ট রোলগুলির জন্য মেথড অ্যাক্সেস প্রদান করে।
import javax.annotation.security.RolesAllowed;
import org.springframework.stereotype.Service;
@Service
public class ProductService {
@RolesAllowed("ADMIN")
public void createProduct() {
System.out.println("Product created!");
}
@RolesAllowed({"USER", "ADMIN"})
public void viewProduct() {
System.out.println("Product viewed!");
}
}
@RolesAllowed("ADMIN")
: শুধুমাত্র ADMIN রোলের ব্যবহারকারী createProduct()
মেথডটি অ্যাক্সেস করতে পারবেন।Spring Security-তে method-level security ব্যবহারের মাধ্যমে আপনি নির্দিষ্ট মেথডের জন্য নিরাপত্তা নিয়ন্ত্রণ করতে পারেন। এটি fine-grained access control প্রদান করে, যেখানে আপনি নির্দিষ্ট রোল, পারমিশন বা শর্তের উপর ভিত্তি করে মেথড অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। Spring Security-তে বিভিন্ন ধরনের annotations (যেমন @PreAuthorize
, @Secured
, @PostAuthorize
, @RolesAllowed
) ব্যবহার করে মেথড-ভিত্তিক নিরাপত্তা কনফিগার করা যায়।
স্প্রিং সিকিউরিটির @PreAuthorize
, @PostAuthorize
, এবং @Secured
অ্যানোটেশনগুলি মেথড লেভেল সিকিউরিটি প্রয়োগ করতে ব্যবহৃত হয়। এগুলি আপনাকে স্প্রিং অ্যাপ্লিকেশনগুলিতে সিকিউরিটি নিয়মগুলো সরাসরি মেথডের উপর প্রয়োগ করার সুবিধা দেয়, যা কোডে রোল-ভিত্তিক অথরাইজেশন বা এক্সপ্রেশন-ভিত্তিক অথরাইজেশন নির্ধারণ করতে সাহায্য করে।
@PreAuthorize
অ্যানোটেশন@PreAuthorize
অ্যানোটেশনটি একটি মেথড এক্সিকিউট হওয়ার আগে নির্দিষ্ট শর্ত পূর্ণ হলে এক্সিকিউশন অনুমোদন দেয়। এটি স্প্রিং এলএক্সপ্রেশন ল্যাঙ্গুয়েজ (SpEL) ব্যবহার করে শর্ত নির্ধারণ করতে পারে।
@PreAuthorize
অ্যানোটেশন ব্যবহার করে আপনি মেথডের এক্সিকিউশন আগে নিশ্চিত করতে পারেন যে নির্দিষ্ট শর্ত বা অনুমতি রয়েছে।@PreAuthorize("hasRole('ADMIN')")
public void deleteUser(Long userId) {
// মেথড যা শুধুমাত্র ADMIN রোল থাকা ইউজারের জন্য এক্সিকিউট হবে
userRepository.deleteById(userId);
}
এখানে, deleteUser
মেথডটি শুধুমাত্র সেই ব্যবহারকারীদের জন্য এক্সিকিউট হবে যাদের রোল "ADMIN"।
@PreAuthorize
অ্যানোটেশনে স্পেল এক্সপ্রেশন ব্যবহার করা যায় যেমন:
hasRole('ROLE_USER')
- ইউজার যদি 'USER' রোল না থাকে, মেথডটি এক্সিকিউট হবে না।@PreAuthorize("hasPermission(#user, 'DELETE')")
- নির্দিষ্ট শর্তে ফাংশনটি এক্সিকিউট হবে।@PostAuthorize
অ্যানোটেশন@PostAuthorize
অ্যানোটেশনটি মেথড এক্সিকিউট হওয়ার পর শর্ত যাচাই করার জন্য ব্যবহৃত হয়। এর মাধ্যমে আপনি মেথডের রিটার্ন ভ্যালু এক্সিকিউট হওয়ার পর পরীক্ষা করতে পারেন যে সেই রিটার্ন ভ্যালুর উপর ভিত্তি করে অনুমতি আছে কিনা।
@PostAuthorize
অ্যানোটেশনটি রিটার্ন ভ্যালুর উপর ভিত্তি করে অথরাইজেশন নির্ধারণ করে।@PostAuthorize("returnObject.username == authentication.name")
public User getUser(Long userId) {
return userRepository.findById(userId).orElse(null);
}
এখানে, getUser
মেথডটি শুধুমাত্র সেই ক্ষেত্রে রিটার্ন হবে যখন ইউজারের username
বর্তমান ইউজারের সাথে মেলে (authentication.name
)।
@Secured
অ্যানোটেশন@Secured
অ্যানোটেশনটি মেথডের উপর সরাসরি রোল বা অথরিটি ভিত্তিক অ্যাক্সেস কন্ট্রোল প্রয়োগ করতে ব্যবহৃত হয়। এটি একটি সহজ পদ্ধতি যা শুধুমাত্র নির্দিষ্ট রোল বা অনুমতিসমূহকে মেথডের জন্য অনুমোদন দেয়। তবে এটি স্প্রিং এলএক্সপ্রেশন ল্যাঙ্গুয়েজ (SpEL) সমর্থন করে না, যেমন @PreAuthorize
বা @PostAuthorize
।
@Secured
অ্যানোটেশনটি একাধিক রোলের সাথে ব্যবহৃত হতে পারে।@Secured("ROLE_ADMIN")
public void createUser(User user) {
// এই মেথডটি শুধুমাত্র "ROLE_ADMIN" রোল থাকা ইউজারের জন্য এক্সিকিউট হবে
userRepository.save(user);
}
এখানে, createUser
মেথডটি শুধুমাত্র সেই ব্যবহারকারীদের জন্য এক্সিকিউট হবে যাদের রোল "ROLE_ADMIN"।
অ্যানোটেশন | কাজের প্রক্রিয়া | সুবিধা | উদাহরণ |
---|---|---|---|
@PreAuthorize | মেথড এক্সিকিউট হওয়ার আগে শর্ত যাচাই | স্পেল এক্সপ্রেশন ব্যবহার করা যায় | @PreAuthorize("hasRole('ADMIN')") |
@PostAuthorize | মেথড এক্সিকিউট হওয়ার পরে শর্ত যাচাই | রিটার্ন ভ্যালুর উপর ভিত্তি করে অনুমতি যাচাই | @PostAuthorize("returnObject.username == authentication.name") |
@Secured | নির্দিষ্ট রোল ভিত্তিক অথরাইজেশন | সহজ রোল ভিত্তিক অথরাইজেশন | @Secured("ROLE_ADMIN") |
@PreAuthorize
এবং @PostAuthorize
অ্যানোটেশনগুলির মাধ্যমে আপনি স্প্রিং সিকিউরিটিতে খুবই শক্তিশালী অথরাইজেশন পলিসি তৈরি করতে পারেন, যেহেতু এই দুটি স্পেল এক্সপ্রেশন সমর্থন করে, যা আরও নমনীয় কনফিগারেশন দেয়।@Secured
একটি সরল পদ্ধতি, যেখানে আপনি সহজে রোল-ভিত্তিক এক্সেস কন্ট্রোল করতে পারেন।এই অ্যানোটেশনগুলি ব্যবহার করে আপনি স্প্রিং অ্যাপ্লিকেশনে মেথড লেভেল অথরাইজেশন এবং সিকিউরিটি প্রয়োগ করতে পারবেন।
Spring Security তে Method-Level Security হল এমন একটি প্রক্রিয়া যার মাধ্যমে আপনি মেথড লেভেলে নিরাপত্তা কনফিগার করতে পারেন। এটি আপনাকে নির্দিষ্ট মেথডে কোন রোল বা পারমিশন অ্যাসাইন করতে সাহায্য করে। Spring Security এর Method-Level Security কনফিগারেশন দুইটি প্রধান পদ্ধতিতে করা যায়:
এছাড়াও, @EnableGlobalMethodSecurity এনোটেশন দিয়ে Method-level security চালু করতে হয়।
@EnableGlobalMethodSecurity এনোটেশন ব্যবহার করে Method-Level Security সক্রিয় করতে হয়। এটি আপনার Spring Security কনফিগারেশন ক্লাসে যুক্ত করতে হবে।
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
public class SecurityConfig {
// Method-level security এখানে কনফিগার করা হবে
}
এখানে prePostEnabled = true
, securedEnabled = true
, এবং jsr250Enabled = true
ব্যবহার করা হয়েছে। এই প্যারামিটারগুলি method-level security এর জন্য বিভিন্ন বৈশিষ্ট্য সক্ষম করে।
এখন, Method-Level Security কনফিগার করতে আমরা বিভিন্ন এনোটেশন ব্যবহার করব:
@PreAuthorize
এনোটেশন ব্যবহার করে আমরা নির্দিষ্ট শর্তে অ্যাক্সেস অনুমোদন বা প্রত্যাখ্যান করতে পারি। এই এনোটেশনটি স্প্রিং এলএক্সপ্রেশন ল্যাঙ্গুয়েজ (SpEL) ব্যবহার করে কন্ডিশন চেক করতে দেয়।
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@PreAuthorize("hasRole('ADMIN')")
public void createUser() {
System.out.println("User created");
}
@PreAuthorize("hasRole('USER')")
public void viewUser() {
System.out.println("User details viewed");
}
@PreAuthorize("hasRole('USER') and #userId == authentication.principal.id")
public void updateUser(Long userId) {
System.out.println("User updated");
}
}
এখানে:
createUser()
মেথড শুধুমাত্র ADMIN
রোল দ্বারা অ্যাক্সেস করা যাবে।viewUser()
মেথড শুধুমাত্র USER
রোল দ্বারা অ্যাক্সেস করা যাবে।updateUser(Long userId)
মেথডে এটি যাচাই করা হয় যে, ব্যবহারকারী যে userId
পাস করবে তা ঐ ব্যবহারকারীর নিজের আইডি।@Secured
এনোটেশন ব্যবহার করে আমরা মেথড লেভেলে রোল-ভিত্তিক নিরাপত্তা নিশ্চিত করতে পারি। এটি সাধারণত রোল নামের তালিকা গ্রহণ করে।
import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Service;
@Service
public class ProductService {
@Secured("ROLE_ADMIN")
public void deleteProduct() {
System.out.println("Product deleted");
}
@Secured({"ROLE_ADMIN", "ROLE_USER"})
public void viewProduct() {
System.out.println("Product viewed");
}
}
এখানে:
deleteProduct()
মেথড শুধুমাত্র ROLE_ADMIN
রোল দ্বারা অ্যাক্সেস করা যাবে।viewProduct()
মেথড ROLE_ADMIN
এবং ROLE_USER
উভয় রোল দ্বারা অ্যাক্সেস করা যাবে।@RolesAllowed
এনোটেশনটি JSR-250 স্ট্যান্ডার্ড অনুসরণ করে এবং ব্যবহারকারীর রোলের ভিত্তিতে মেথড অ্যাক্সেস নিয়ন্ত্রণ করে।
import javax.annotation.security.RolesAllowed;
import org.springframework.stereotype.Service;
@Service
public class OrderService {
@RolesAllowed("ADMIN")
public void cancelOrder() {
System.out.println("Order cancelled");
}
@RolesAllowed({"USER", "ADMIN"})
public void placeOrder() {
System.out.println("Order placed");
}
}
এখানে:
cancelOrder()
মেথড শুধুমাত্র ADMIN
রোল দ্বারা অ্যাক্সেস করা যাবে।placeOrder()
মেথড USER
অথবা ADMIN
রোল দ্বারা অ্যাক্সেস করা যাবে।এখন, যেহেতু আমরা মেথড-লেভেল নিরাপত্তা কনফিগার করেছি, চলুন একটি উদাহরণ তৈরি করি যেখানে আমরা UserService
এবং ProductService
এর মেথডগুলো অ্যাক্সেস করার জন্য রোল যাচাই করি।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SecurityTestController {
@Autowired
private UserService userService;
@Autowired
private ProductService productService;
@GetMapping("/createUser")
public String createUser() {
userService.createUser(); // This should be accessible only by ADMIN
return "User created";
}
@GetMapping("/viewUser")
public String viewUser() {
userService.viewUser(); // This should be accessible only by USER
return "User details viewed";
}
@GetMapping("/deleteProduct")
public String deleteProduct() {
productService.deleteProduct(); // This should be accessible only by ADMIN
return "Product deleted";
}
@GetMapping("/placeOrder")
public String placeOrder() {
productService.placeOrder(); // This should be accessible by both USER and ADMIN
return "Order placed";
}
}
এখন, এই API গুলোটি ব্যবহারকারী যখন কল করবে, তখন শুধুমাত্র নির্দিষ্ট রোলের ব্যবহারকারীই সেই মেথডগুলো অ্যাক্সেস করতে পারবে।
Method-Level Security Spring Security-তে নিরাপত্তার একটি শক্তিশালী উপাদান যা আপনাকে মেথডের স্তরে নিরাপত্তা কনফিগার করার সুবিধা দেয়। @PreAuthorize
, @Secured
, এবং @RolesAllowed
এনোটেশনগুলি আপনাকে নির্দিষ্ট রোল বা শর্ত অনুযায়ী মেথড অ্যাক্সেস নিয়ন্ত্রণ করতে সহায়ক। Spring Security এ এই কনফিগারেশন অত্যন্ত কাস্টমাইজযোগ্য এবং সহজে পরিচালনা করা যায়।
Read more